package org.wisdom.ab.apis;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.wisdom.ab.dto.CompanyDto;
import org.wisdom.annotation.AppFacade;
import org.wisdom.annotation.WisdomFeignClient;
import org.wisdom.vo.PageModel;
import org.wisdom.vo.ResponseResult;

/**
 * 公司管理API
 *
 * @author 张智研
 * @date 2022/05/20 14:03
 **/
@WisdomFeignClient(name = "${wisdom.ab.name:wisdom-ab}", path = "/${wisdom.ab.name:wisdom-ab}/company", contextId = "wisdom-ab-company")
public interface CompanyController {

    /**
     * 创建或更新公司
     *
     * @author 张智研
     * @date 2022/05/20 14:37
     * @param companyDto
     *            公司信息
     * @return org.wisdom.vo.ResponseResult<java.lang.String>
     */
    @PostMapping
    @AppFacade("创建或更新公司")
    @PreAuthorize("@ps.hasPermission('ab:company:save')")
    ResponseResult<String> save(@RequestBody CompanyDto companyDto);

    /**
     * 获取公司信息
     *
     * @author 张智研
     * @date 2022/05/20 14:38
     * @param companyId
     *            公司id
     * @return org.wisdom.vo.ResponseResult<org.wisdom.ab.dto.CompanyDto>
     */
    @GetMapping("/{companyId}")
    @AppFacade("根据公司id获取公司信息")
    @PreAuthorize("@ps.hasPermission('ab:company:get')")
    ResponseResult<CompanyDto> get(@PathVariable("companyId") String companyId);

    /**
     * 注销公司
     *
     * @author 张智研
     * @date 2022/05/20 14:44
     * @param companyIds
     *            公司id
     * @return org.wisdom.vo.ResponseResult<java.lang.String>
     */
    @DeleteMapping("/{companyIds}")
    @AppFacade("根据公司id删除公司")
    @PreAuthorize("@ps.hasPermission('ab:company:delete')")
    ResponseResult<String> delete(@PathVariable("companyIds") String companyIds);

    /**
     * 获取公司列表
     *
     * @author 张智研
     * @date 2022/05/20 14:50
     * @param companyDto
     *            查询条件
     * @return org.wisdom.vo.ResponseResult<org.wisdom.vo.PageModel<org.wisdom.ab.dto.CompanyDto>>
     */
    @GetMapping("/list")
    @AppFacade("查询公司列表-分页查询")
    @PreAuthorize("@ps.hasPermission('ab:company:list')")
    ResponseResult<PageModel<CompanyDto>> list(CompanyDto companyDto);
}
